Annotation¶

Dendritic and macrophage spleenic subsets. Progenitor

Lewis et al., 2011

In [1]:
library_load <- suppressMessages(
    
    list(
        
        # Seurat 
        library(Seurat), 
        library(monocle3), 
        
        # SingleR
        library(SingleR), 
        library(SingleCellExperiment), 
        
        # Data 
        library(tidyverse)
        
    )
)
In [2]:
random_seed <- 42
set.seed(random_seed)
In [3]:
options(warn=-1)
In [4]:
# Set working directory to project root
setwd("/research/peer/fdeckert/FD20200109SPLENO")
In [5]:
# Source files
source("plotting_global.R")
source("bin/SeuratQC.R")
source("bin/plotDEA.R")
source("../scFacility/script/dirFacility.R")
In [6]:
# Plotting Theme
ggplot2::theme_set(theme_global_set()) # From project global source()

Parameter settings¶

In [7]:
so_file <- "data/object/so_sct_int_hvg8000.rds"
so_pp_file <- "data/object/so_pp.rds"

Import Seurat object¶

In [8]:
so <- readRDS(so_file)

UMAP¶

In [9]:
DefaultAssay(so) <- "integrated"
so <- FindNeighbors(so, dims=1:10, k.param=50, verbose=FALSE)
so <- FindClusters(so, verbose=FALSE, resolution=0.5, algorithm=1, group.singletons=TRUE)
so <- RunUMAP(so, dims=1:15, n.neighbors=80, verbose=FALSE)
In [10]:
options(repr.plot.width=22.5, repr.plot.height=20)

dplot_1 <- dplot(so, reduction="umap", group_by="seurat_clusters", label=TRUE) + ggtitle("Louvain")
dplot_2 <- dplot(so, reduction="umap", group_by="tissue") + scale_color_manual(values=color$tissue) + ggtitle("Tissue")
dplot_3 <- dplot(so, reduction="umap", group_by="cc_phase_class") + scale_color_manual(values=color$cc_phase_class) + ggtitle("Cell cycle")
dplot_4 <- dplot(so, reduction="umap", group_by="label_fine_haemosphere") + scale_color_manual(values=color$label_fine_haemosphere) + ggtitle("Haemosphere label")
dplot_5 <- dplot(so, reduction="umap", group_by="sample_rep") + ggtitle("Replicate")
dplot_6 <- dplot(so, reduction="umap", group_by="treatment") + scale_color_manual(values=color$treatment) + ggtitle("Treatment")
fplot_1 <- fplot(so, reduction="umap", features="pMt_RNA") + ggtitle("Percentage Mt")
fplot_2 <- fplot(so, reduction="umap", features="pHb_RNA") + ggtitle("Percentage Hb")
fplot_3 <- fplot(so, reduction="umap", features="pRb_RNA") + ggtitle("Percentage Rb")
fplot_4 <- fplot(so, reduction="umap", features="nCount_RNA") + ggtitle("UMI count")
fplot_5 <- fplot(so, reduction="umap", features="nFeature_RNA") + ggtitle("Feature count")

dplot_comb <- dplot_1 + dplot_2 + dplot_3 + dplot_4 + dplot_5 + dplot_6 + fplot_1 + fplot_2 + fplot_3 + fplot_4 + fplot_5 +  plot_layout(ncol=3)
dplot_comb
In [11]:
options(repr.plot.width=22.5, repr.plot.height=3)
DimPlot(so, reduction="umap", group.by="seurat_clusters", split.by="seurat_clusters", label=TRUE) + theme(legend.position="none")
In [12]:
so@meta.data %>% dplyr::group_by(seurat_clusters, treatment, sample_rep) %>% 
    dplyr::summarise(n=n()) %>% data.frame() %>% 
    tidyr::spread(seurat_clusters, n) %>% 
    kableExtra::kable("html") %>% as.character() %>% IRdisplay::display_html()
`summarise()` has grouped output by 'seurat_clusters', 'treatment'. You can
override using the `.groups` argument.
treatment sample_rep 0 1 2 3 4 5 6 7 8 9 10 11 12 13
CpG Rep1 1066 1052 239 173 523 415 516 227 264 166 192 110 109 70
CpG Rep2 1248 1468 600 236 181 798 149 491 224 378 282 93 61 158
NaCl Rep1 275 145 187 406 505 64 554 115 319 115 12 67 101 40
NaCl Rep2 464 210 852 972 287 218 126 503 139 261 121 66 61 58

Lineage gene modules¶

Marker genes are taken from Dahlin et al., 2018

In [13]:
DefaultAssay(so) <- "RNA"
In [14]:
so <- AddModuleScore(so, features=c("Procr"), name="msHSC") #Procr, Fgd5, Hoxb5
so <- AddModuleScore(so, features=c("Dntt"), name="msLy") #Dntt, Flt3, Rag2
so <- AddModuleScore(so, features=c("Cd3g", "Cd3e", "Cd3d", "Cd247"), name="msTly") #Dntt, Flt3, Rag2
so <- AddModuleScore(so, features=c("Igha"), name="msBly") #Dntt, Flt3, Rag2
so <- AddModuleScore(so, features=c("Pf4", "Itga2b", "Gp1bb"), name="msMeg") #Pf4, Itga2b, Gp1bb
so <- AddModuleScore(so, features=c("Klf1", "Epor", "Gata1"), name="msEry") #Klf1, Epor, Gata1
so <- AddModuleScore(so, features=c("Elane", "Gfi1", "Cebpe"), name="msNeu") #Elane, Gfi1, Cebpe
so <- AddModuleScore(so, features=c("Csf1r", "Ly86"), name="msMo") #Irgf8, Csf1r, Ly86
so <- AddModuleScore(so, features=c("Prg2", "Prg3"), name="msEo") #Prg2, Prg3
so <- AddModuleScore(so, features=c("Gzmb", "Cma1"), name="msMa") #Gzmb, Cma1
so <- AddModuleScore(so, features=c("Prss34", "Mcpt8"), name="msBa") #Prss34, Mcpt8
In [15]:
options(repr.plot.width=22.5, repr.plot.height=20)

fplot_1 <- fplot(so, reduction="umap", features="msHSC1") + ggtitle("HSC\n (Procr)") + theme(plot.title=element_text(hjust=0.5))
fplot_2 <- fplot(so, reduction="umap", features="msLy1") + ggtitle("Lymphoid\n (Dntt)") + theme(plot.title=element_text(hjust=0.5))
fplot_3 <- fplot(so, reduction="umap", features="msTly1") + ggtitle("T Lymphoid\n (Cd3, Cd247)") + theme(plot.title=element_text(hjust=0.5))
fplot_4 <- fplot(so, reduction="umap", features="msBly1") + ggtitle("B Lymphoid\n (Igha)") + theme(plot.title=element_text(hjust=0.5))
fplot_5 <- fplot(so, reduction="umap", features="msMeg1") + ggtitle("Megakaryocyte\n (Pf4, Itga2b, Gp1bb)") + theme(plot.title=element_text(hjust=0.5))
fplot_6 <- fplot(so, reduction="umap", features="msEry1") + ggtitle("Erythroid\n (Klf1, Epor, Gata1)") + theme(plot.title=element_text(hjust=0.5))
fplot_7 <- fplot(so, reduction="umap", features="msNeu1") + ggtitle("Neutrophil\n (Elane, Gfi1, Cebpe)") + theme(plot.title=element_text(hjust=0.5))
fplot_8 <- fplot(so, reduction="umap", features="msMo1") + ggtitle("Monocyte\n (Csf1r, Ly86)") + theme(plot.title=element_text(hjust=0.5))
fplot_9 <- fplot(so, reduction="umap", features="msEo1") + ggtitle("Eosinophil\n (Prg2, Prg3)") + theme(plot.title=element_text(hjust=0.5))
fplot_10 <- fplot(so, reduction="umap", features="msMa1") + ggtitle("Mast\n (Gzmb, Cma1)") + theme(plot.title=element_text(hjust=0.5))
fplot_11 <- fplot(so, reduction="umap", features="msBa1") + ggtitle("Basophil\n (Prss34, Mcpt8)") + theme(plot.title=element_text(hjust=0.5))
fplot_12 <- fplot(so, reduction="umap", features="Ms4a3") + ggtitle("GMP\n (Ms4a3)") + theme(plot.title=element_text(hjust=0.5))

dplot_comb <- fplot_1 + fplot_2 + fplot_3 + fplot_4 + fplot_5 + fplot_6 + fplot_7 + fplot_8 + fplot_9 + fplot_10 + fplot_11 + fplot_12 + plot_layout(ncol=4)
dplot_comb

Erythroid marker¶

In [16]:
options(repr.plot.width=22.5, repr.plot.height=10)

fplot_1 <- fplot(so, reduction="umap", features="Gata2") + ggtitle("Gata2")
fplot_2 <- fplot(so, reduction="umap", features="Gata1") + ggtitle("Gata1")
fplot_3 <- fplot(so, reduction="umap", features="Epor") + ggtitle("Epor")
fplot_4 <- fplot(so, reduction="umap", features="Epop") + ggtitle("Epop")
fplot_4 <- fplot(so, reduction="umap", features="Tfrc") + ggtitle("Tfrc")
fplot_5 <- fplot(so, reduction="umap", features="Tfr2") + ggtitle("Tfr2")
fplot_6 <- fplot(so, reduction="umap", features="Icam4") + ggtitle("Icam4")

dplot_comb <- fplot_1 + fplot_2 + fplot_3 + fplot_4 + fplot_5 + fplot_6 + plot_layout(ncol=3)
dplot_comb

Myeloid marker genes¶

In [17]:
options(repr.plot.width=22.5, repr.plot.height=20)

fplot_1 <- fplot(so, reduction="umap", features="Cd8a") + ggtitle("Cd8a")
fplot_2 <- fplot(so, reduction="umap", features="Cd4") + ggtitle("Cd4")
fplot_3 <- fplot(so, reduction="umap", features="H2-Eb1") + ggtitle("H2-Eb1 (MHC II)")
fplot_4 <- fplot(so, reduction="umap", features="Ms4a3") + ggtitle("Ms4a3") # GMP
fplot_5 <- fplot(so, reduction="umap", features="Cx3cr1") + ggtitle("Cx3cr1") # Macrophage DC progenitor (MDP) derived 
fplot_6 <- fplot(so, reduction="umap", features="Csf1r") + ggtitle("Csf1r") # Macrophage DC progenitor (MDP) derived 
fplot_7 <- fplot(so, reduction="umap", features="Irf8") + ggtitle("Irf8") # Macrophage specification 
fplot_8 <- fplot(so, reduction="umap", features="Nr1h3") + ggtitle("Nr1h3") # Macrophage specification 
fplot_9 <- fplot(so, reduction="umap", features="Spic") + ggtitle("Spic") # Macrophage specification 
fplot_10 <- fplot(so, reduction="umap", features="Sell") + ggtitle("CD62L") # Macrophage specification 
fplot_11 <- fplot(so, reduction="umap", features="Esam") + ggtitle("Esam") 
fplot_12 <- fplot(so, reduction="umap", features="Itgam") + ggtitle("Itgam (CD11b)") #CD11b

dplot_comb <- fplot_1 + fplot_2 + fplot_3 + fplot_4 + fplot_5 + fplot_6 + fplot_7 + fplot_8 + fplot_9 + fplot_10 + fplot_11 + fplot_12 + plot_layout(ncol=4)
dplot_comb

Differential expression analysis (DEA)¶

Wilcox cell type marker¶

In [18]:
# dea <- lapply(sort(unique(so$seurat_clusters)), function(seurat_clusters) {FindConservedMarkers(so, ident.1=seurat_clusters, grouping.var="treatment", assay="RNA", slot="data", test.use="wilcox")})
# saveRDS(dea, "result/annotation/dea_leiden_wilcox.rds")
dea <- readRDS("result/annotation/dea_leiden_wilcox.rds")
In [19]:
options(repr.plot.width=25, repr.plot.height=50)

names(dea) <- paste("Cluster", 1:length(dea)-1)
cmdp <- lapply(names(dea), function(title) {conserved_markers_dp(dea[[title]], title=title, n_top=50, filter="pos_only")})

wrap_plots(cmdp, ncol=5)
Loading required package: magrittr


Attaching package: ‘magrittr’


The following object is masked from ‘package:purrr’:

    set_names


The following object is masked from ‘package:tidyr’:

    extract


Update cluster annotation¶

In [20]:
cluster_to_cell_type <- data.frame(
    
    seurat_clusters=c(
        
        "0", 
        "1", 
        "2", 
        "3", 
        "4", 
        "5", 
        "6", 
        "7", 
        "8", 
        "9", 
        "10", 
        "11", 
        "12", 
        "13"
        
    ),
    
    cell_type=c(
        
        "Ery (5)", 
        "Ery (4)", 
        "Ery (1)", 
        "MEP", 
        "MDP (1)", 
        "Ery (3)", 
        "DC CD8-", 
        "Ery (2)", 
        "MDP (2)", 
        "DC CD8+", 
        "MDP (3)", 
        "GMP (2)", 
        "RPM", 
        "GMP (1)"
        
    )
)
In [21]:
cluster_to_cell_type <- dplyr::left_join(so@meta.data, cluster_to_cell_type, by="seurat_clusters") %>% 
    dplyr::mutate(cell_id=rownames(so@meta.data)) %>% 
    tibble::column_to_rownames("cell_id")  %>% 
    dplyr::select(cell_type)
In [22]:
so <- AddMetaData(so, cluster_to_cell_type)
In [23]:
options(repr.plot.width=20, repr.plot.height=5)

dplot_1 <- dplot(so, reduction="umap", group_by="seurat_clusters", label=TRUE) + ggtitle("Leiden")
dplot_2 <- dplot(so, reduction="umap", group_by="cell_type") # + scale_color_manual(values=color$leiden_annotation) + ggtitle("Annotation")

dplot_comb <- dplot_1 + dplot_2 + plot_layout(ncol=2)
dplot_comb

Monocel on all data¶

In [24]:
expression_data <- GetAssayData(so, assay="RNA", slot="counts")
cell_metadata <- so@meta.data
cell_metadata$sample_name <- NULL

cds <- new_cell_data_set(expression_data=expression_data , cell_metadata=cell_metadata)

# Set gene names for plotting
rowData(cds)$gene_name <- rownames(cds)
rowData(cds)$gene_short_name <- rowData(cds)$gene_name
In [25]:
options(repr.plot.width=5, repr.plot.height=5)

cds <- preprocess_cds(cds, num_dim=100)
cds <- align_cds(cds, alignment_group="sample_group", alignment_k=20, residual_model_formula_str="~ nCount_RNA + pMt_RNA")
Aligning cells from different batches using Batchelor. 
Please remember to cite:
	 Haghverdi L, Lun ATL, Morgan MD, Marioni JC (2018). 'Batch effects in single-cell RNA-sequencing data are corrected by matching mutual nearest neighbors.' Nat. Biotechnol., 36(5), 421-427. doi: 10.1038/nbt.4091

In [26]:
options(repr.plot.width=25, repr.plot.height=15)

cds <- reduce_dimension(cds, reduction_method="UMAP", preprocess_method='Aligned', umap.n_neighbors=20)
cds <- cluster_cells(cds, cluster_method="leiden", k=20)

dplot_1 <- plot_cells(cds, label_groups_by_cluster=FALSE,  color_cells_by="treatment", group_label_size=5, show_trajectory_graph=FALSE) + ggtitle("Treatment")
dplot_2 <- plot_cells(cds, label_groups_by_cluster=FALSE,  color_cells_by="cc_phase_class", group_label_size=5, show_trajectory_graph=FALSE) + ggtitle("cc_phase_class")
dplot_3 <- plot_cells(cds, label_groups_by_cluster=FALSE,  color_cells_by="cell_type", group_label_size=5, show_trajectory_graph=FALSE) + ggtitle("Cell type (Seurat)")
dplot_4 <- plot_cells(cds, label_groups_by_cluster=FALSE,  color_cells_by="cluster", group_label_size=5, show_trajectory_graph=FALSE) + ggtitle("Monocle cluster")
dplot_5 <- plot_cells(cds, label_groups_by_cluster=FALSE,  color_cells_by="partition", group_label_size=5, show_trajectory_graph=FALSE) + ggtitle("Partition")

dplot_6 <- plot_cells(cds, label_groups_by_cluster=FALSE,  genes="Gata2", scale_to_range=FALSE, show_trajectory_graph=FALSE) + theme(aspect.ratio=1, legend.position="none")
dplot_7 <- plot_cells(cds, label_groups_by_cluster=FALSE,  genes="Gata1", scale_to_range=FALSE, show_trajectory_graph=FALSE) + theme(aspect.ratio=1, legend.position="none")
dplot_8 <- plot_cells(cds, label_groups_by_cluster=FALSE,  genes="Epor", scale_to_range=FALSE, show_trajectory_graph=FALSE) + theme(aspect.ratio=1, legend.position="none")
dplot_9 <- plot_cells(cds, label_groups_by_cluster=FALSE,  genes="Tfrc", scale_to_range=FALSE, show_trajectory_graph=FALSE) + theme(aspect.ratio=1, legend.position="none")
dplot_10 <- plot_cells(cds, label_groups_by_cluster=FALSE,  genes="Icam4", scale_to_range=FALSE, show_trajectory_graph=FALSE) + theme(aspect.ratio=1, legend.position="none")

dplot_11 <- plot_cells(cds, label_groups_by_cluster=FALSE,  genes="Cd4", scale_to_range=FALSE, show_trajectory_graph=FALSE) + theme(aspect.ratio=1, legend.position="none")
dplot_12 <- plot_cells(cds, label_groups_by_cluster=FALSE,  genes="Cd8a", scale_to_range=FALSE, show_trajectory_graph=FALSE) + theme(aspect.ratio=1, legend.position="none")
dplot_13 <- plot_cells(cds, label_groups_by_cluster=FALSE,  genes="Itgam", scale_to_range=FALSE, show_trajectory_graph=FALSE) + theme(aspect.ratio=1, legend.position="none")
dplot_14 <- plot_cells(cds, label_groups_by_cluster=FALSE,  genes="Esam", scale_to_range=FALSE, show_trajectory_graph=FALSE) + theme(aspect.ratio=1, legend.position="none")
dplot_15 <- plot_cells(cds, label_groups_by_cluster=FALSE,  genes="Foxp3", scale_to_range=FALSE, show_trajectory_graph=FALSE) + theme(aspect.ratio=1, legend.position="none")

dplot_1 + dplot_2 + dplot_3 + dplot_4 + dplot_5 + dplot_6 + dplot_7 + dplot_8 + dplot_9 + dplot_10 + dplot_11 + dplot_12 + dplot_13 + dplot_14 + dplot_15 + plot_layout(ncol=5)
In [27]:
cds <- learn_graph(cds)
  |======================================================================| 100%
  |======================================================================| 100%
  |======================================================================| 100%
  |======================================================================| 100%
In [28]:
options(repr.plot.width=25, repr.plot.height=5)

dplot_1 <- plot_cells(cds, label_groups_by_cluster=FALSE,  color_cells_by="treatment", group_label_size=5) + ggtitle("Treatment")
dplot_2 <- plot_cells(cds, label_groups_by_cluster=FALSE,  color_cells_by="cc_phase_class", group_label_size=5) + ggtitle("cc_phase_class")
dplot_3 <- plot_cells(cds, label_groups_by_cluster=FALSE,  color_cells_by="cell_type", group_label_size=5) + ggtitle("Cell type (Seurat)")
dplot_4 <- plot_cells(cds, label_groups_by_cluster=FALSE,  color_cells_by="cluster", group_label_size=5) + ggtitle("Monocle cluster")
dplot_5 <- plot_cells(cds, label_groups_by_cluster=FALSE,  color_cells_by="partition", group_label_size=5) + ggtitle("Partition")

dplot_1 + dplot_2 + dplot_3 + dplot_4 + dplot_5 + plot_layout(ncol=5)

Recluster Monocytes/DC/Macrophages with Monocle3 and subcluster¶

In [ ]:

Save result¶

In [29]:
saveRDS(so, so_pp_file)

Session info¶

In [30]:
sessionInfo()
R version 4.1.0 (2021-05-18)
Platform: x86_64-conda-linux-gnu (64-bit)
Running under: Red Hat Enterprise Linux 8.2 (Ootpa)

Matrix products: default
BLAS/LAPACK: /home/fdeckert/bin/miniconda3/envs/r.4.1.0-FD20200109SPLENO/lib/libopenblasp-r0.3.15.so

locale:
 [1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C              
 [3] LC_TIME=en_US.UTF-8        LC_COLLATE=en_US.UTF-8    
 [5] LC_MONETARY=en_US.UTF-8    LC_MESSAGES=en_US.UTF-8   
 [7] LC_PAPER=en_US.UTF-8       LC_NAME=C                 
 [9] LC_ADDRESS=C               LC_TELEPHONE=C            
[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C       

attached base packages:
[1] stats4    stats     graphics  grDevices utils     datasets  methods  
[8] base     

other attached packages:
 [1] magrittr_2.0.3              Matrix_1.4-1               
 [3] patchwork_1.1.1             RColorBrewer_1.1-3         
 [5] forcats_0.5.1               stringr_1.4.0              
 [7] dplyr_1.0.9                 purrr_0.3.4                
 [9] readr_2.1.2                 tidyr_1.2.0                
[11] tibble_3.1.7                ggplot2_3.3.6              
[13] tidyverse_1.3.1             SingleR_1.8.1              
[15] monocle3_1.0.0              SingleCellExperiment_1.16.0
[17] SummarizedExperiment_1.24.0 GenomicRanges_1.46.1       
[19] GenomeInfoDb_1.30.1         IRanges_2.28.0             
[21] S4Vectors_0.32.4            MatrixGenerics_1.6.0       
[23] matrixStats_0.62.0          Biobase_2.54.0             
[25] BiocGenerics_0.40.0         sp_1.4-7                   
[27] SeuratObject_4.1.0          Seurat_4.1.1               

loaded via a namespace (and not attached):
  [1] utf8_1.2.2                reticulate_1.24          
  [3] tidyselect_1.1.2          htmlwidgets_1.5.4        
  [5] grid_4.1.0                BiocParallel_1.28.3      
  [7] Rtsne_0.16                munsell_0.5.0            
  [9] ScaledMatrix_1.2.0        codetools_0.2-18         
 [11] ica_1.0-2                 pbdZMQ_0.3-7             
 [13] future_1.25.0             miniUI_0.1.1.1           
 [15] batchelor_1.10.0          withr_2.5.0              
 [17] spatstat.random_2.2-0     colorspace_2.0-3         
 [19] progressr_0.10.0          highr_0.9                
 [21] knitr_1.39                uuid_1.1-0               
 [23] rstudioapi_0.13           ROCR_1.0-11              
 [25] tensor_1.5                listenv_0.8.0            
 [27] labeling_0.4.2            repr_1.1.4               
 [29] GenomeInfoDbData_1.2.7    polyclip_1.10-0          
 [31] farver_2.1.0              parallelly_1.31.1        
 [33] vctrs_0.4.1               generics_0.1.2           
 [35] xfun_0.30                 R6_2.5.1                 
 [37] rsvd_1.0.5                bitops_1.0-7             
 [39] spatstat.utils_2.3-0      DelayedArray_0.20.0      
 [41] assertthat_0.2.1          promises_1.2.0.1         
 [43] scales_1.2.0              rgeos_0.5-9              
 [45] gtable_0.3.0              beachmat_2.10.0          
 [47] Cairo_1.5-15              globals_0.14.0           
 [49] goftest_1.2-3             rlang_1.0.2              
 [51] systemfonts_1.0.4         splines_4.1.0            
 [53] lazyeval_0.2.2            spatstat.geom_2.4-0      
 [55] broom_0.8.0               reshape2_1.4.4           
 [57] abind_1.4-5               modelr_0.1.8             
 [59] backports_1.4.1           httpuv_1.6.5             
 [61] tools_4.1.0               kableExtra_1.3.4         
 [63] ellipsis_0.3.2            spatstat.core_2.4-2      
 [65] proxy_0.4-26              ggridges_0.5.3           
 [67] Rcpp_1.0.8.3              plyr_1.8.7               
 [69] base64enc_0.1-3           sparseMatrixStats_1.6.0  
 [71] zlibbioc_1.40.0           RCurl_1.98-1.6           
 [73] rpart_4.1.16              deldir_1.0-6             
 [75] pbapply_1.5-0             viridis_0.6.2            
 [77] cowplot_1.1.1             zoo_1.8-10               
 [79] haven_2.5.0               ggrepel_0.9.1            
 [81] cluster_2.1.3             fs_1.5.2                 
 [83] data.table_1.14.2         RSpectra_0.16-1          
 [85] scattermore_0.8           ResidualMatrix_1.4.0     
 [87] lmtest_0.9-40             reprex_2.0.1             
 [89] RANN_2.6.1                fitdistrplus_1.1-8       
 [91] hms_1.1.1                 mime_0.12                
 [93] evaluate_0.15             xtable_1.8-4             
 [95] readxl_1.4.0              gridExtra_2.3            
 [97] compiler_4.1.0            KernSmooth_2.23-20       
 [99] crayon_1.5.1              htmltools_0.5.2          
[101] mgcv_1.8-40               later_1.3.0              
[103] tzdb_0.3.0                lubridate_1.8.0          
[105] DBI_1.1.2                 dbplyr_2.1.1             
[107] MASS_7.3-57               leidenbase_0.1.11        
[109] cli_3.3.0                 parallel_4.1.0           
[111] igraph_1.3.1              pkgconfig_2.0.3          
[113] scuttle_1.4.0             IRdisplay_1.1            
[115] plotly_4.10.0             spatstat.sparse_2.1-1    
[117] xml2_1.3.3                svglite_2.1.0            
[119] webshot_0.5.3             XVector_0.34.0           
[121] rvest_1.0.2               digest_0.6.29            
[123] sctransform_0.3.3         RcppAnnoy_0.0.19         
[125] spatstat.data_2.2-0       rmarkdown_2.14           
[127] cellranger_1.1.0          leiden_0.3.10            
[129] uwot_0.1.11               DelayedMatrixStats_1.16.0
[131] shiny_1.7.1               lifecycle_1.0.1          
[133] nlme_3.1-157              jsonlite_1.8.0           
[135] BiocNeighbors_1.12.0      limma_3.50.3             
[137] viridisLite_0.4.0         fansi_1.0.3              
[139] pillar_1.7.0              lattice_0.20-45          
[141] fastmap_1.1.0             httr_1.4.3               
[143] survival_3.3-1            glue_1.6.2               
[145] png_0.1-7                 stringi_1.7.6            
[147] BiocSingular_1.10.0       IRkernel_1.3             
[149] irlba_2.3.5               future.apply_1.9.0